package bintree.leetcode;

/**
 * @Author: yuisama
 * @Date: 2022/9/19 14:49
 * @Description:后序遍历之修剪二叉树
 */
public class Num814_PruneTree {
    // 传入一颗二叉树的根节点root，就能移除所有不包含1的子树，返回移除后二叉树的树根
    public TreeNode pruneTree(TreeNode root) {
        if(root == null) {
            return null;
        }
        // 先剪枝子树
        root.left = pruneTree(root.left);
        root.right = pruneTree(root.right);
        // 为什么需要先处理子树呢，因为当子树处理完毕，保证子树中所有不包含1的子树修剪完毕
        // 才能决定当前树根的处理情况
        // 后序位置，处理当前树根，当且仅当树根节点值为0，且删除后的左右子树为空，才返回null
        if(root.val == 0 && root.left == null && root.right == null) {
            return null;
        }
        return root;
    }
}
